package com.liqing.movecomment.util;

import com.auth0.jwt.exceptions.TokenExpiredException;

import com.liqing.movecomment.exception.LdException;
import com.liqing.movecomment.exception.LdExceptionEnum;
import io.jsonwebtoken.Claims;
import io.jsonwebtoken.JwtBuilder;
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date;


public class JwtUtils {

    // 加盐
    public static final String SALT = "com.susu.move";

    /**
     * 创建令牌
     *
     * @param id   id
     * @param name 名字
     * @return {@link String}
     */
    public static String createToken(String id, String name) {
//         long now = System.currentTimeMillis();  //当前时间
//         long exp = now + 1000 * 60 * keepTime; //过期时间为30分钟
        //创建JWT对象
        JwtBuilder builder = Jwts.builder().setId(id)//设置负载内容
                .setSubject(name)
                .setIssuedAt(new Date())//设置签发时间
                .signWith(SignatureAlgorithm.HS256, SALT);//设置签名秘钥
//                .setExpiration(new Date(exp))//设置过期时间 30分钟
        //构建token
        return builder.compact();
    }


    /**
     * 解析令牌
     *
     * @param token 令牌
     * @return {@link String}
     */
    public static String parseToken(String token) throws LdException {

        //还要判断是否过期
        try{
//解析Token，生成Claims对象，Token中存放的用户信息解析到了claims对象中
            Claims claims = Jwts.parser().setSigningKey(SALT).parseClaimsJws(token).getBody();
            return claims.getId();

        }catch (TokenExpiredException exception){

            //如果过期了
            throw  new LdException(LdExceptionEnum.EXPIRE_ERROR);

        }catch (Exception e){
            throw  new LdException(LdExceptionEnum.ERROR_TOKEN);
        }


    }


//
//    public static Result isOutToken(){
//
//
//    }



}
